#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<iostream>
#include<vector>
using namespace std;

enum Status
{
	EMPTY,
	EXIST,
	DELETE
};


template<class K,class V>
struct HashDate
{
	pair<K, V> _kv;
	Status _s;
};

template<class K,class V>
class HashTable
{
	HashTable()
	{
		_table.resize(10);
	}

	bool Insert(pair<K, V>& kv)
	{
		if (_n * 10 / _table.size() == 6)
		{
			size_t newsize = _table * 2;
			HashTable<K,V> newHT;
			newHT._table.resize(newsize);
			for (int i = 0; i < _table.size(); i++)
			{
				if (_table[i]._s == EXIST)
				{
					newHT.Insert(_table[i]._kv);
				}
			}
			_table.swap(newHT._table);
		}
		size_t hashi = kv.first % _table.size();
		while (_table[hashi]._s == EXIST)
		{
			hashi++;
			hashi %= _table.size();
		}
		_table[hashi]._kv = kv;
		_table[hashi]._s = EXIST;
		++_n;


		return true;
	}

private:
	vector<HashDate> _table;
	size_t _n;
};


